package info.vokabel;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.logging.Level;
import java.util.logging.Logger;

public class EListe {

    ListenElement kopf, ende, aktuell;
    String filename;

    public EListe(String file) {
        this.filename = file;
        kopf = ende = aktuell = null;
    }

    public void zumAnfang() {
        aktuell = kopf;
    }

    public void zumende() {
        aktuell = ende;
    }

    public Object aktuellesElement() {
        return aktuell.Inhalt;
    }

    public Object naechstesElement() {
        if (istLeer()) {
            return null;
        }
        if (aktuell.next != null) {
            aktuell = aktuell.next;
        }
        return aktuell.Inhalt;
    }

    public Object Vorschau() {
        if (istLeer()) {
            return null;
        }
        if (aktuell.next != null) {
            return aktuell.next.Inhalt;
        } else {
            return aktuell.Inhalt;
        }
    }

    public void vorneEinfuegen(Object o) {
        ListenElement l = new ListenElement(o, kopf,null);
        if (istLeer()) // leere Liste
        {
            kopf = ende = aktuell = l;
        } else {
            kopf = aktuell = l;
        }
    }

    public void einfuegen(Object o) {
        if (istLeer()) //leere Liste
        {
            vorneEinfuegen(o);
            return;
        }
        ListenElement neu = new ListenElement(o, aktuell.next,aktuell.prior);
        aktuell.next = neu;
        if (aktuell == ende) //hinten an der Liste angefügt
        {
            ende = neu;
        }
    }

    
    
    public Object aktuellesEntfernen() {
        if (istLeer()) //leere Liste
        {
            return null;
        }
        ListenElement entferne = aktuell, temp = kopf;
        if (entferne == kopf) //erstes Element entfernen
        {
            kopf = kopf.next;
            aktuell = kopf;
        } else {
            while (temp.next != entferne) {
                temp = temp.next;
            }
            //Vörgänger von entferne in temp
            temp.next = aktuell.next;
            aktuell = temp;
        }
        return entferne.Inhalt;
    }

    public boolean istLeer() {
        return (kopf == null);
    }

    public int gibLänge() {
        int Länge = 0;
        ListenElement temp = kopf;

        if (istLeer()) {
            return 0;
        }
        while (temp != null) {
            Länge++;
            temp = temp.next;
        }
        return Länge;
    }
    
    public void loadSelf(){
        try {
            File f=new File(filename);
            if(!f.exists()){
                f.createNewFile();
                this.einfuegen(new VokabelElement("Liste leer","Liste leer"));
                return;
            }
            BufferedReader br=new BufferedReader(new FileReader(new File(filename)));
            String buf;
            if((buf=br.readLine())!=null){
                if(!buf.contains(";")){
                    this.einfuegen(new VokabelElement("Fehlerhafte Zeile","Fehlerhafte Zeile"));
                }
                this.einfuegen(new VokabelElement(buf.split(";")[0],buf.split(";")[1]));
            } else {
                this.einfuegen(new VokabelElement("Liste leer","Liste leer"));
                br.close();
                return;
            }
            while((buf=br.readLine())!=null){
                if(!buf.contains(";")){
                    this.einfuegen(new VokabelElement("Fehlerhafte Zeile","Fehlerhafte Zeile"));
                }
                this.einfuegen(new VokabelElement(buf.split(";")[0],buf.split(";")[1]));
            }
            br.close();
        } catch (Exception ex) {
            Logger.getLogger(VokabelListe.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    void goTo(int test_position) {
        this.zumAnfang();
        for(int i=0;i<test_position;i++){
            this.naechstesElement();
        }
    }
    
    public void appendFile(String ap) {
        try {
            File f = new File(filename);
            if (!f.exists()) {
                f.createNewFile();
            }
            FileWriter ff = new FileWriter(filename, true);
            ff.append(ap + "\r\n");
            ff.close();
        } catch (Exception ex) {
            Logger.getLogger(VokabelListe.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void addNewT(VokabelElement e) {
        //this.add(e);
        appendFile(e.getDeutsch() + ";" + e.getEnglisch());
    }
}
